package com.ipartek.formacion.gestformwww.modelo.clases;

import com.ipartek.formacion.gestformwww.modelo.interfaces.*;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
 * Los objetos de esta clase tendran la funcion de conectar y desconectar con la base de datos asi como
 * de generar los objetos que implementan las interfaces del patron DAO.
 * @author David
 **/
public class SQLServerDAOFactory extends DAOFactory {

    private static  DataSource ds = null;
  

    /**
     * Constructor de la clase.
     **/
    
   public SQLServerDAOFactory() {
        
        try {
            if (ds==null)
            {
                InitialContext ictx = new InitialContext();
                Context ctx = (Context) ictx.lookup("java:comp/env");
                ds = (DataSource) ctx.lookup("jdbc/GestForm");
            }
            
        } catch (NamingException ex) {
            Logger.getLogger(SQLServerDAOFactory.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Método que conecta con la base de datos.
     **/
    public static Connection conecta() throws SQLException {
        Connection pcon = null;
        pcon = ds.getConnection();
        return pcon;
    }

    /**
     * Método que desconecta de la base de datos.
     * @param pcon Connection es el objeto de tipo connection que se desconectara de la base de datos
     **/
    public static void desconecta(Connection pcon) {
        if (pcon != null) {
            try {
                pcon.close();

            } catch (SQLException ex) {
                Logger.getLogger(SQLServerDAOFactory.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerAccesoDAO.
     **/
    @Override
    public IAccesoDAO getIAccesoDAO() {
        return (IAccesoDAO)SQLServerIDAOFactory.getIDAO(SQLServerAccesoDAO.class.getName(),this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerAlumnoDAO.
     **/
    @Override
    public IAlumnoDAO getIAlumnoDAO() {
       return (IAlumnoDAO)SQLServerIDAOFactory.getIDAO(SQLServerAlumnoDAO.class.getName(),this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerAlumCursoDAO.
     **/
    @Override
    public IAlumCursoDAO getIAlumCursoDAO() {
        return (IAlumCursoDAO)SQLServerIDAOFactory.getIDAO(SQLServerAlumCursoDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerAsistenciaDAO.
     **/
    @Override
    public IAulaDAO getIAulaDAO() {
         return (IAulaDAO)SQLServerIDAOFactory.getIDAO(SQLServerAulaDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerAsistenciaDAO.
     **/
    @Override
    public IDocenteDAO getIDocenteDAO() {
         return (IDocenteDAO)SQLServerIDAOFactory.getIDAO(SQLServerDocenteDAO.class.getName(), this.getClass().getClassLoader());
    
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerAsistenciaDAO.
     **/
    @Override
    public IAsistenciaDAO getIAsistenciaDAO() {
          return (IAsistenciaDAO)SQLServerIDAOFactory.getIDAO(SQLServerAsistenciaDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerCalificacionDAO.
     **/
    @Override
    public ICalificacionDAO getICalificacionDAO() {
         return (ICalificacionDAO)SQLServerIDAOFactory.getIDAO(SQLServerCalificacionDAO.class.getName(), this.getClass().getClassLoader());
    }

   

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerClienteDAO.
     **/
    @Override
    public IClienteDAO getIClienteDAO() {
         return (IClienteDAO)SQLServerIDAOFactory.getIDAO(SQLServerClienteDAO.class.getName(), this.getClass().getClassLoader());
    }

    

   
    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerCursoDAO.
     **/
    @Override
    public ICursoDAO getICursoDAO() {
         return (ICursoDAO)SQLServerIDAOFactory.getIDAO(SQLServerCursoDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerDiaClaseDAO.
     **/
    @Override
    public IDiaClaseDAO getIDiaClaseDAO() {
          return (IDiaClaseDAO)SQLServerIDAOFactory.getIDAO(SQLServerDiaClaseDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerEmpresaoDAO.
     **/
    @Override
    public IEmpresaDAO getIEmpresaDAO() {
          return (IEmpresaDAO)SQLServerIDAOFactory.getIDAO(SQLServerEmpresaDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerLoginDAO.
     **/
    @Override
    public ILoginDAO getILoginDAO() {
          return (ILoginDAO)SQLServerIDAOFactory.getIDAO(SQLServerLoginDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerModuloDAO.
     **/
    @Override
    public IModuloDAO getIModuloDAO() {
          return (IModuloDAO)SQLServerIDAOFactory.getIDAO(SQLServerModuloDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerResponsableDAO.
     **/
    public IResponsableDAO getIResponsableDAO() {
         return (IResponsableDAO)SQLServerIDAOFactory.getIDAO(SQLServerResponsableDAO.class.getName(), this.getClass().getClassLoader());
    }

    /**
     * Método que desconecta de la base de datos.
     * @return devuelve un objeto de tipo SQLServerTipoCursoDAO.
     **/
    public ITipoCursoDAO getITipoCursoDAO() {
         return (ITipoCursoDAO)SQLServerIDAOFactory.getIDAO(SQLServerTipoCursoDAO.class.getName(), this.getClass().getClassLoader());
    }

    public IProcedenciaDAO getIProcedenciaDAO() {
          return (IProcedenciaDAO)SQLServerIDAOFactory.getIDAO(SQLServerProcedenciaDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public IEstadoDAO getIEstadoDAO() {
          return (IEstadoDAO)SQLServerIDAOFactory.getIDAO(SQLServerEstadoDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public ISMSDAO getISMSDAO() {
          return (ISMSDAO)SQLServerIDAOFactory.getIDAO(SQLServerSMSDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public ICorreoDAO getICorreoDAO() {
          return (ICorreoDAO)SQLServerIDAOFactory.getIDAO(SQLServerCorreoDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public ICandidatoDAO getICandidatoDAO() {
        return (ICandidatoDAO)SQLServerIDAOFactory.getIDAO(SQLServerCandidatoDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public ICandConvDAO getICandConvDAO() {
        return (ICandConvDAO)SQLServerIDAOFactory.getIDAO(SQLServerCandConvDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public IConvocatoriaDAO getIConvocatoriaDAO() {
        return (IConvocatoriaDAO)SQLServerIDAOFactory.getIDAO(SQLServerConvocatoriaDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public IContactoDAO getIContactoDAO() {
        return (IContactoDAO)SQLServerIDAOFactory.getIDAO(SQLServerContactoDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public IMaterialDAO getIMaterialDAO() {
         return (IMaterialDAO)SQLServerIDAOFactory.getIDAO(SQLServerMaterialDAO.class.getName(), this.getClass().getClassLoader());
    }

    @Override
    public IEntregaDAO getIEntregaDAO() {
       return (IEntregaDAO)SQLServerIDAOFactory.getIDAO(SQLServerEntregaDAO.class.getName(), this.getClass().getClassLoader());
    }
}
